import axios from "axios";
import router from "../router/index";
import { ElMessage } from "element-plus";

// 创建axios实例
const instance = axios.create({
	baseURL: "/api", // 基础URL，可根据实际情况修改
	timeout: 10000, // 请求超时时间
	headers: {
		"Content-Type": "application/json",
	},
});

// 请求拦截器
instance.interceptors.request.use((config) => {
	// 从localStorage获取token
	const token = localStorage.getItem("token");
	if (token) {
		config.headers["Authorization"] = `Bearer ${token}`;
	}
	return config;
});

// 响应拦截器
instance.interceptors.response.use(
	(response) => {
		// 后端总是返回Result对象，我们需要解析它
		const { code, message,data } = response.data;
		
		// 处理Token失效的情况（code为403）
		if (code === 403) {
			// 清除无效的token
			localStorage.removeItem("token");

			// 获取当前页面路径，用于登录成功后重定向
			const currentPath = window.location.pathname + window.location.search;

			// 使用router进行重定向，确保路由正确跳转
			router.push({
				path: "/login",
				query: { redirect: currentPath },
			});
			// 抛出错误，让调用者可以处理
			ElMessage.error(message);
		}

		// 对于其他状态码，直接返回数据
		return response.data;
	},
	(error) => {
		// 显示错误消息
		ElMessage.error("服务器连接失败，请检查服务器是否开启或网络连接是否正常");
		// 重要：拒绝Promise，这样错误会被传递到调用方的catch块
		return Promise.reject(error);
	}
);

export default instance;
